package cn.xingzhe.monster.user.domain.service;

import cn.xingzhe.monster.user.domain.exception.RoleNotFoundException;
import cn.xingzhe.monster.user.domain.model.RoleModel;
import cn.xingzhe.monster.user.domain.repository.RoleRepository;

/**
 * 角色领域服务
 * 处理角色相关的领域业务逻辑
 *
 * @author System
 * @version 1.0.0
 * @since 2024-01-01
 */
public class RoleDomainService {

    private final RoleRepository roleRepository;

    public RoleDomainService(RoleRepository roleRepository) {
        this.roleRepository = roleRepository;
    }

    /**
     * 验证角色代码是否可以使用
     *
     * @param roleCode 角色代码
     * @return 是否可以使用
     */
    public boolean validateRoleCode(String roleCode) {
        return !roleRepository.findByRoleCode(roleCode).isPresent();
    }

    /**
     * 检查是否可以分配权限给角色
     *
     * @param roleId        角色ID
     * @param permissionIds 权限ID列表
     * @return 是否可以分配
     */
    public boolean canAssignPermission(String roleId, java.util.List<String> permissionIds) {
        RoleModel role = roleRepository.findById(roleId)
                .orElseThrow(() -> RoleNotFoundException.byId(roleId));
        // 检查权限是否已存在
        return permissionIds.stream()
                .anyMatch(permissionId -> !role.hasPermission(permissionId));
    }
}

